//实现文件加密解密：加密规则是读出每一个字节，取反(~)后，写入
//新文件，然后删除原文件，把新文件改成原文件同名的文件，
//解密规则类似。输入一个文件名，实现加密和解密功能
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;

public class test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("输入文件名：");
        String fileName = scanner.nextLine();
        File file = new File(fileName);

        if (!file.exists()) {
            System.out.println("文件不存在！");
            return;
        }

        System.out.print("选择操作（加密：1，解密：2）：");
        int option = scanner.nextInt();
        scanner.close();

        if (option == 1) {
            encryptFile(file);
            System.out.println("文件已加密。");
        } else if (option == 2) {
            decryptFile(file);
            System.out.println("文件已解密。");
        } else {
            System.out.println("无效操作选项。");
        }
    }

    private static void encryptFile(File file) {
        File tempFile = new File(file.getAbsolutePath() + ".tmp");
        try (FileInputStream fis = new FileInputStream(file);
             FileOutputStream fos = new FileOutputStream(tempFile)) {
            int byteRead;
            while ((byteRead = fis.read()) != -1) {
                // 按位取反操作
                fos.write(~byteRead);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 删除原文件并将临时文件重命名为原文件名
        if (file.delete()) {
            tempFile.renameTo(file);
        }
    }

    private static void decryptFile(File file) {
        // 解密操作与加密操作相同
        encryptFile(file);
    }
}